/*!
 * \file cq_city_payment_core.h
 *
 * \brief 共通定义
 *
 * All Rights Reserved Copyright (C) 2014 broada,Co.,Ltd.\n
 * 共通使用的宏和结构体
 *
 * \version 1.0
 * \author jikw
 * \date 2017/3/21
 *
 */

#ifndef _CQ_CITY_PAYMENT_CORE_H_
#define _CQ_CITY_PAYMENT_CORE_H_

#include "conntrack.h"
#include "module.h"

#define CQ_HASH_SIZE          100             //哈希桶的最大尺寸
#define CQ_TIMEOUT            5*60            //单位秒

#define BLOCKMARK             "\x7b\x31\x3a"  //块标识
#define FINALMARK             '\x7d'          //结束标识
#define VERID                 '\x30'          //版本识别码
#define EXPTIME               "\x20\x20\x20\x20"              //有效时间
#define DELITIME              "\x20\x20\x20\x20\x20\x20"      //提交时间
#define RESERVE               "\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20"//预留

//子系统识别
#define IDENTIFICATION_S      '\x53'          //业务处理中心后台子系统
#define IDENTIFICATION_B      '\x42'          //商业银行
#define IDENTIFICATION_W      '\x57'          //WEB子系统
//信息优先级
#define MESGPRI_5             '\x35'          //加急
#define MESGPRI_9             '\x39'          //普通

#define SHORTTESTMASK         "\x7b\x32\x3a"  //短报文体开始标志
#define LONGTESTMASK          "\x7b\x46\x3a"  //长报文体开始标志
#define TAGBREAK              '\x3a'          //TAG分隔符

#define TAG_50A               "\x35\x30\x41"  //付款人姓名
#define TAG_59A               "\x35\x39\x41"  //收款人名称
#define TAG_72A               "\x37\x32\x41"  //附言
#define TAG_CR2               "\x43\x52\x32"  //原付款人姓名
#define TAG_OPE               "\x4f\x50\x45"  //原收款人名称
#define TAG_OPR               "\x4f\x50\x52"  //原付款人名称
#define TAG_RNM               "\x52\x4e\x4d"  //接收清算行名称
#define TAG_BNM               "\x42\x4e\x4d"  //收/付款人开户行名称
#define TAG_MSG               "\x4d\x53\x47"  //附言
#define TAG_DTM               "\x44\x54\x4d"  //失败明细
#define TAG_BNN               "\x42\x4e\x4e"  //行号名称
#define TAG_ADD               "\x41\x44\x44"  //地址
#define TAG_LKN               "\x4c\x4b\x4e"  //联系人姓名
#define TAG_LTN               "\x4c\x54\x4e"  //联系电话

int cq_city_payment_detect(Conntrack *p_st_conn, Apm_packet *p_st_packet);
int cq_city_payment_analysis(Conntrack *p_st_conn, Apm_packet *p_st_packet, Frhash_header *p_st_hash_report);
int cq_city_payment_session_destroy(void *p_private_session);
void cq_city_payment_list_node_free(Frlist_node *p_st_node);

#endif